//导入模块
const db = require('../db/index.js')
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const config = require('../schema/config.js')

//注册的处理函数
exports.regUser = (req, res) => {
  //客户端提交信息
  const userinfo = req.body
  //对表单数据，进行合法性校验
  // if (!userinfo.username || !userinfo.password) {
  //     // return res.send({ status: 1, message: '用户名或密码不合法！' })
  //     return res.cc(err);
  // }
  //调用sql语句查询用户名是否被占用
  const sqlStr = `select * from ev_user where username=?`
  db.query(sqlStr, [userinfo.username], (err, results) => {
    if (err) return res.cc(err)
    if (results.length > 0) {
      // return res.send({ status: 1, message: '用户名被占用，请更换其他用户名！' })
      return res.cc('用户名被占用，请更换其他用户名！')
    }
    //TODO:调用bcrypt.hashSync()对密码进行加密
    userinfo.password = bcrypt.hashSync(userinfo.password, 10)
    //定义插入的SQL语句
    const sql = `insert into ev_user set ?`
    db.query(sql, { username: userinfo.username, password: userinfo.password }, (err, results) => {
      //判断sql语句是否执行成功
      if (err) return res.cc(err)
      //判断受影响的行是否为1
      if (results.affectedRows !== 1) {
        // return res.send({ status: 1, message: '注册用户失败，请稍后再试！' })
        return res.cc('用户名被占用，请更换其他用户名！')
      }
      // res.send({ status: 0, message: '注册用户成功！' })
      res.cc('注册用户成功！', 0)
    })
  })
  // res.send('reguser ok');
}

//登录的处理函数
exports.login = (req, res) => {
  //客户端提交信息
  const userinfo = req.body
  //查询的SQL语句
  const sqlStr = `select * from ev_user where username=?`
  db.query(sqlStr, userinfo.username, (err, results) => {
    //如果查询出错了
    if (err) return res.cc(err)
    //SQL查询到了但判断受影响的行数

    if (results.length !== 1) return res.cc('登录失败！')
    //拿用户登录的密码和数据库中的密码进行比较

    const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
    //结果false表示登录成功
    if (!compareResult) return res.cc('登录失败!')

    //TODO：在服务器端生成token字符串
    const user = { ...results[0], password: '', user_pic: '' }
    const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn })
    //将token响应给客户端
    res.send({
      status: 0,
      mseesge: '登录成功！',
      token: 'Bearer ' + tokenStr
    })
  })
}
